Apache Commons Collections এর একটি গুরুত্বপূর্ণ অংশ হল Functor ইন্টারফেস। Functor হলো এমন একটি ধারণা যা সাধারণত functional programming এ ব্যবহৃত হয়। এটি এমন একটি object যা functionality ধারণ করে এবং একটি নির্দিষ্ট operation (অপারেশন) সম্পাদন করে। Apache Commons Collections এ, Functor ইন্টারফেসটি বেশ কিছু functional-style অপারেশনগুলিকে সহজে প্রয়োগ করার জন্য ব্যবহৃত হয়, যেমন predicate checking, transformation ইত্যাদি।
Functor ইন্টারফেস একটি সাধারণ ধারণা যা operation বা functional tasks করার জন্য ব্যবহৃত হয়। এটি মূলত একটি ফাংশন বা মেথডের রিপ্রেজেন্টেশন হিসেবে কাজ করে, যা কোনো নির্দিষ্ট ডেটা প্রক্রিয়া করতে পারে।
Functor ইন্টারফেসে সাধারণত একটি execute
মেথড থাকে, যা এক বা একাধিক আর্গুমেন্ট নেয় এবং কোনো কার্য সম্পাদন করে।
Apache Commons Collections লাইব্রেরি Functor এর জন্য অনেক ধরনের ইন্টারফেস এবং ক্লাস প্রদান করেছে, যেমন Predicate, Transformer ইত্যাদি, যা Functor ইন্টারফেসের বাস্তবায়ন।
Predicate একটি Functor যা কোনো নির্দিষ্ট শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি একটি Boolean রিটার্ন করে, যা একটি শর্তের সত্যতা বা মিথ্যাতা নির্দেশ করে।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.functors.NotPredicate;
import org.apache.commons.collections4.functors.TruePredicate;
public class FunctorExample {
public static void main(String[] args) {
// Predicate তৈরি করা
Predicate<String> truePredicate = TruePredicate.getInstance();
Predicate<String> notPredicate = new NotPredicate<>(truePredicate);
// Predicate পরীক্ষা করা
System.out.println("Predicate result: " + notPredicate.evaluate("Hello")); // Output: false
}
}
এখানে:
TruePredicate.getInstance()
একটি predicate তৈরি করে যা সবসময় true রিটার্ন করবে।NotPredicate
ক্লাসটি একটি বিদ্যমান predicate এর বিপরীত ফলাফল রিটার্ন করে।Transformer একটি ফাংশনাল ফিচার যা একটি আর্গুমেন্ট নেয় এবং একটি নতুন মান রিটার্ন করে। এটি ডেটা রূপান্তর বা ট্রান্সফর্মেশনের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.ConstantTransformer;
public class FunctorExample {
public static void main(String[] args) {
// Transformer তৈরি করা
Transformer<String, Integer> transformer = new ConstantTransformer<>(5);
// Transformer ব্যবহার করে মান রূপান্তর করা
System.out.println("Transformed result: " + transformer.transform("Hello")); // Output: 5
}
}
এখানে:
ConstantTransformer
একটি ফিক্সড ভ্যালু প্রদান করে, যে কোন ইনপুট গ্রহণ করলেও সেটি একই রিটার্ন করবে (এই ক্ষেত্রে, 5)।Invoker ইন্টারফেস Functor এর একটি বাস্তবায়ন, যা একাধিক Functor এর মধ্যে কোনো একটি নির্দিষ্ট Functor execute করতে পারে। এটি command pattern এর মতো কাজ করে যেখানে বিভিন্ন কার্যক্রম সংজ্ঞায়িত থাকে, এবং ইনভোকারের মাধ্যমে তা চালানো হয়।
import org.apache.commons.collections4.FunctorException;
import org.apache.commons.collections4.functors.Invoker;
public class FunctorExample {
public static void main(String[] args) {
// Invoker ব্যবহার করে Functor execute করা
Invoker invoker = new Invoker();
// Functor তৈরি
FunctorExampleInvoker functorInvoker = new FunctorExampleInvoker();
// Functor execute করা
try {
invoker.invoke(functorInvoker, new Object[] { "test" });
} catch (FunctorException e) {
e.printStackTrace();
}
}
public static class FunctorExampleInvoker {
public void execute(String param) {
System.out.println("Executing functor with param: " + param);
}
}
}
এখানে:
Invoker
ক্লাসটি Functor execute করার জন্য ব্যবহৃত হয়েছে।FunctorExampleInvoker
একটি কাস্টম ক্লাস যা execute মেথড সম্পাদন করে।Apache Commons Collections এর Functor ইন্টারফেস এবং এর ক্লাসগুলো ব্যবহার করে আপনার Java অ্যাপ্লিকেশনকে আরো নমনীয়, রিচ ফিচার সমৃদ্ধ এবং কার্যকরী করতে পারেন।
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor হল একটি সাধারণ প্রোগ্রামিং কনসেপ্ট, যা একটি কোড ব্লক বা লজিক্যাল ফাংশনালিটি হিসেবে কাজ করে। এটি একটি অবজেক্ট যা একটি বা একাধিক ইনপুট গ্রহণ করে এবং একটি আউটপুট প্রদান করে, অথবা কোনো প্রভাব (side effect) তৈরি করে।
জাভাতে, Functor সাধারণত একটি ইন্টারফেস হিসেবে তৈরি হয়, যা একটি নির্দিষ্ট পদ্ধতি (method) বাস্তবায়ন করে। অ্যাপাচি কমন্স কালেকশনস Functor ব্যবহার করে বিভিন্ন ফাংশনাল অপারেশন (যেমন ফিল্টারিং, ট্রান্সফর্মেশন) সহজ করে।
অ্যাপাচি কমন্স কালেকশনস-এ চারটি প্রধান ধরনের Functor রয়েছে:
Transformer হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি প্রসেসিং সম্পন্ন করার পরে আউটপুট প্রদান করে।
ব্যবহার উদাহরণ: ডেটা রূপান্তরের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class TransformerExample {
public static void main(String[] args) {
// Transformer তৈরি
Transformer<Integer, String> transformer = input -> "Number: " + input;
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// ডেটা রূপান্তর
List<String> transformed = new ArrayList<>(CollectionUtils.collect(numbers, transformer));
System.out.println(transformed);
}
}
আউটপুট:
[Number: 1, Number: 2, Number: 3]
Predicate হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি বুলিয়ান (true/false) মান প্রদান করে।
ব্যবহার উদাহরণ: ডেটা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class PredicateExample {
public static void main(String[] args) {
// Predicate তৈরি
Predicate<Integer> isEven = input -> input % 2 == 0;
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
// ডেটা ফিল্টারিং
List<Integer> evenNumbers = new ArrayList<>(CollectionUtils.select(numbers, isEven));
System.out.println(evenNumbers);
}
}
আউটপুট:
[2, 4]
Closure একটি Functor যা একটি ইনপুট গ্রহণ করে এবং কোনো রিটার্ন না দিয়ে একটি নির্দিষ্ট কাজ সম্পন্ন করে।
ব্যবহার উদাহরণ: লুপিং বা ইনপুটের উপর কোনো কার্য সম্পাদনে ব্যবহৃত হয়।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class ClosureExample {
public static void main(String[] args) {
// Closure তৈরি
Closure<Integer> printClosure = input -> System.out.println("Processing: " + input);
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Closure প্রয়োগ
CollectionUtils.forAllDo(numbers, printClosure);
}
}
আউটপুট:
Processing: 1
Processing: 2
Processing: 3
Factory একটি Functor যা কোনো ইনপুট ছাড়াই একটি নতুন অবজেক্ট তৈরি করে আউটপুট প্রদান করে।
ব্যবহার উদাহরণ: নির্দিষ্ট অবজেক্ট তৈরি করতে ব্যবহৃত হয়।
import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.ListUtils;
import java.util.List;
public class FactoryExample {
public static void main(String[] args) {
// Factory তৈরি
Factory<String> stringFactory = () -> "New String Object";
// Factory থেকে একটি নতুন লিস্ট তৈরি
List<String> newList = ListUtils.lazyList(ListUtils.emptyIfNull(null), stringFactory);
// লিস্টে আইটেম অ্যাক্সেস
newList.add("Hello");
System.out.println(newList.get(1)); // Factory ব্যবহার করে তৈরি হবে
}
}
আউটপুট:
New String Object
সারাংশ
Functor হল অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির একটি শক্তিশালী বৈশিষ্ট্য, যা ডেটা ট্রান্সফরমেশন, ফিল্টারিং, এবং অন্যান্য কার্য সম্পাদনে ব্যবহৃত হয়। এর প্রকারভেদ (Transformer, Predicate, Closure, Factory) বিভিন্ন প্রয়োজন অনুযায়ী ডেটা প্রসেসিং সহজ করে তোলে।
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor একটি শক্তিশালী ধারণা, যা Predicate, Transformer, এবং Closure এর মাধ্যমে বিভিন্ন কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। এটি কার্যক্রমকে জেনেরিক এবং রিইউজেবল করার সুযোগ প্রদান করে।
Functor হল একটি ফাংশনাল ইন্টারফেস যা একটি নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। অ্যাপাচি কমন্স লাইব্রেরি Functor
ধারণার মাধ্যমে বিভিন্ন কাজ সহজতর করে।
Predicate একটি ফাংশনাল ইন্টারফেস, যা একটি শর্ত (condition) যাচাই করে এবং true
বা false
রিটার্ন করে। এটি সাধারণত ডেটা ফিল্টারিং বা শর্ত চেক করার জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import java.util.ArrayList;
import java.util.List;
public class PredicateExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Predicate যা শুধু জোড় সংখ্যা রিটার্ন করে
Predicate<Integer> isEven = number -> number % 2 == 0;
// ফিল্টার করা
List<Integer> evenNumbers = new ArrayList<>();
CollectionUtils.select(numbers, isEven, evenNumbers);
System.out.println("Even Numbers: " + evenNumbers);
}
}
Even Numbers: [10, 20]
Transformer একটি অবজেক্টকে অন্য একটি অবজেক্টে রূপান্তরিত করে। এটি ম্যাপিং বা ডেটা ট্রান্সফরমেশনের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import java.util.ArrayList;
import java.util.List;
public class TransformerExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Transformer যা সংখ্যা স্কয়ার করে
Transformer<Integer, Integer> squareTransformer = number -> number * number;
// ট্রান্সফর্ম করা
List<Integer> squaredNumbers = new ArrayList<>();
CollectionUtils.transform(numbers, squareTransformer);
System.out.println("Squared Numbers: " + numbers);
}
}
Squared Numbers: [1, 4, 9]
Closure একটি কার্যক্রম সম্পাদন করে এবং এর কোনো আউটপুট রিটার্ন করে না। এটি সাধারণত সাইড এফেক্টযুক্ত কার্যক্রমের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Closure;
import java.util.ArrayList;
import java.util.List;
public class ClosureExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Closure যা প্রতিটি সংখ্যা প্রিন্ট করে
Closure<Integer> printClosure = System.out::println;
// লিস্টে কার্যক্রম প্রয়োগ
CollectionUtils.forAllDo(numbers, printClosure);
}
}
1
2
3
Functor ধারণার মাধ্যমে Predicate, Transformer, এবং Closure কে একই কাঠামোয় ব্যবহার করা যায়। এটি কোডকে আরও জেনেরিক এবং মডুলার করে তোলে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Functor এর ইন্টিগ্রেশন রয়েছে:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import java.util.ArrayList;
import java.util.List;
public class FunctorIntegrationExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// Predicate: শুধু জোড় সংখ্যা সিলেক্ট করে
Predicate<Integer> isEven = number -> number % 2 == 0;
// Transformer: সংখ্যা দ্বিগুণ করে
Transformer<Integer, Integer> doubleTransformer = number -> number * 2;
// Closure: সংখ্যাগুলো প্রিন্ট করে
Closure<Integer> printClosure = System.out::println;
// Filter, Transform এবং Apply
List<Integer> evenNumbers = new ArrayList<>();
CollectionUtils.select(numbers, isEven, evenNumbers);
CollectionUtils.transform(evenNumbers, doubleTransformer);
CollectionUtils.forAllDo(evenNumbers, printClosure);
}
}
4
8
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি Functor এর মাধ্যমে জাভার কার্যক্রমকে আরও মডুলার এবং কার্যকরী করে তোলে।
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি একটি শক্তিশালী টুল যা Java প্রোগ্রামিং ভাষায় উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল Functor Classes, যা ফাংশনাল প্রোগ্রামিংয়ের ধারণা অনুসরণ করে এবং আপনাকে ফাংশনাল প্রোগ্রামিংয়ের সুবিধা দিয়ে ডেটা ম্যানিপুলেশন করতে সাহায্য করে।
Functor হল একটি অবজেক্ট যা কিছু প্রক্রিয়া বা অপারেশন প্রতিনিধিত্ব করে, যা সাধারণত কোন অ্যাকশন বা ফাংশন (যেমন মান পরিবর্তন, গণনা, ট্রান্সফরমেশন ইত্যাদি) সম্পাদন করতে ব্যবহৃত হয়। কমন্স কালেকশনসে Functor ক্লাসগুলি আপনাকে কালেকশন এর আইটেমগুলির সাথে বিভিন্ন কার্যক্রম (যেমন ট্রান্সফরমেশন, ম্যানিপুলেশন, ইত্যাদি) করার জন্য সাহায্য করে।
Functor Class গুলি ক্লাসের মধ্যে ফাংশনাল কার্যকলাপ বা অপারেশন সংজ্ঞায়িত করে। এটি মূলত একটি এক্সিকিউটেবল অপারেশন যা কোনো ক্যালকুলেশন বা ট্রান্সফরমেশন সম্পাদন করে। ফানক্টর ক্লাসের মাধ্যমে আপনি বিভিন্ন রকমের ফাংশনাল অপারেশন একত্রিত এবং পুনঃব্যবহারযোগ্য করতে পারেন, যেমন:
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি বিভিন্ন ধরনের Functor Class সরবরাহ করে যা ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংকে সহজ করে তোলে। নিচে কিছু সাধারণ Functor Class এবং তাদের ব্যবহার আলোচনা করা হল:
Transformer ফানক্টর ক্লাসটি একটি মান (value) গ্রহণ করে এবং সেটি একটি পরিবর্তিত বা ট্রান্সফর্মড মানে রূপান্তর করে। এটি মূলত একটি মাপিং (mapping) অপারেশন হিসেবে কাজ করে, যেখানে ইনপুট মানটি একটি নতুন আউটপুট মানে রূপান্তরিত হয়।
Transformer ক্লাসের প্রধান সুবিধা হল, আপনি একই ফাংশন বা ট্রান্সফরমেশন একাধিক জায়গায় ব্যবহার করতে পারেন, এবং এটি পুনঃব্যবহারযোগ্য।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.ConstantTransformer;
public class TransformerExample {
public static void main(String[] args) {
// Create a transformer that always returns "Hello"
Transformer<Object, String> transformer = new ConstantTransformer("Hello");
// Apply the transformer
String result = transformer.transform(null); // Output: "Hello"
System.out.println(result);
}
}
এখানে:
ConstantTransformer
একটি Transformer
যা কোন ইনপুট ছাড়াই একটি নির্দিষ্ট মান (এখানে "Hello") প্রদান করবে।Predicate ফানক্টর ক্লাসটি একটি শর্ত (condition) পরীক্ষা করে এবং true
বা false
রিটার্ন করে। এটি কালেকশনে শর্তসাপেক্ষ নির্বাচন বা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন আপনি চান একটি কালেকশন থেকে শুধুমাত্র নির্দিষ্ট শর্ত পূর্ণকারী আইটেমগুলি নির্বাচন করতে।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.functors.TruePredicate;
public class PredicateExample {
public static void main(String[] args) {
// Create a predicate that always returns true
Predicate<Object> predicate = TruePredicate.INSTANCE;
// Apply the predicate
boolean result = predicate.evaluate(new Object()); // Output: true
System.out.println(result);
}
}
এখানে:
TruePredicate.INSTANCE
এমন একটি প্রেডিকেট যা সবসময় true
রিটার্ন করে।Action ফানক্টর ক্লাসটি কোনো কার্যকলাপ বা এক্সিকিউশন সম্পাদন করে। এটি সাধারণত কোনো ইনপুট গ্রহণ করে এবং কোনো নির্দিষ্ট কার্যক্রম সম্পাদন করে, যেমন কনসোল আউটপুট, ফাইল লেখা, ইত্যাদি।
import org.apache.commons.collections4.Action;
import org.apache.commons.collections4.functors.PrintAction;
public class ActionExample {
public static void main(String[] args) {
// Create an action that prints a message
Action action = new PrintAction("Hello, Apache Commons!");
// Execute the action
action.execute();
}
}
এখানে:
PrintAction
একটি অ্যাকশন যা নির্দিষ্ট একটি বার্তা (যেমন "Hello, Apache Commons!") কনসোল আউটপুট হিসেবে প্রিন্ট করে।TransformerChain ফানক্টর ক্লাসটি একাধিক ট্রান্সফরমারকে একটি চেইনে একত্রিত করে, এবং ইনপুট মানের উপর একাধিক ট্রান্সফরমেশন প্রক্রিয়া সম্পাদন করে। এটি আপনাকে একাধিক ট্রান্সফরমেশন একসাথে প্রয়োগ করতে সাহায্য করে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.TransformerChain;
import java.util.Arrays;
import java.util.List;
public class TransformerChainExample {
public static void main(String[] args) {
// Define two transformers
Transformer<String, String> toUpperCase = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase();
}
};
Transformer<String, String> addExclamation = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input + "!";
}
};
// Chain the transformers
Transformer<String, String> chain = new TransformerChain<>(Arrays.asList(toUpperCase, addExclamation));
// Apply the transformer chain
String result = chain.transform("hello");
System.out.println(result); // Output: "HELLO!"
}
}
এখানে:
toUpperCase
এবং অন্যটি addExclamation
) একত্রিত হয়ে একটি চেইন তৈরি করা হয়েছে এবং ইনপুটের উপর একাধিক ট্রান্সফরমেশন প্রয়োগ করা হয়েছে।অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির Functor Class ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য একটি শক্তিশালী টুল। এর মধ্যে Transformer, Predicate, Action, TransformerChain প্রভৃতি ফানক্টর ক্লাস রয়েছে, যা ডেটা ট্রান্সফরমেশন, শর্তসাপেক্ষ ফিল্টারিং এবং কার্যকলাপ সম্পাদন করার জন্য ব্যবহৃত হয়। Functor ক্লাসগুলির মাধ্যমে আপনি সহজে এবং কার্যকরভাবে আপনার ডেটা বা কালেকশনগুলোর উপর বিভিন্ন ফাংশন বা অপারেশন প্রয়োগ করতে পারেন।
common.read_more